visited: &mut HashSet<PathBuf>) -> CargoResult<()> {
if !visited.insert(path.to_path_buf()) { return Ok(()) }
- let manifest = try!(find_project_manifest_exact(path, "Cargo.toml"));
+ let manifest_path = try!(find_project_manifest_exact(path, "Cargo.toml"));
+
+ let (manifest, nested) = try!(read_manifest(&manifest_path, source_id, config));
+ let manifest = match manifest {
+ EitherManifest::Real(manifest) => manifest,
+ EitherManifest::Virtual(..) => return Ok(()),
+ };
+ let pkg = Package::new(manifest, &manifest_path);
- let (pkg, nested) = try!(read_package(&manifest, source_id, config));
let pkg_id = pkg.package_id().clone();
if !all_packages.contains_key(&pkg_id) {
all_packages.insert(pkg_id, pkg);
use std::fs::File;
use cargotest::sleep_ms;
-use cargotest::support::{project, execs};
+use cargotest::support::{project, execs, git};
use cargotest::support::registry::Package;
use hamcrest::{assert_that, existing_file, existing_dir, is_not};
assert_that(p.cargo("run").cwd(p.root().join("bin")),
execs().with_status(101));
}
+
+#[test]
+fn workspace_in_git() {
+ let git_project = git::new("dep1", |project| {
+ project
+ .file("Cargo.toml", r#"
+ [workspace]
+ members = ["foo"]
+ "#)
+ .file("foo/Cargo.toml", r#"
+ [package]
+ name = "foo"
+ version = "0.1.0"
+ "#)
+ .file("foo/src/lib.rs", "")
+ }).unwrap();
+ let p = project("foo")
+ .file("Cargo.toml", &format!(r#"
+ [package]
+ name = "lib"
+ version = "0.1.0"
+
+ [dependencies.foo]
+ git = '{}'
+ "#, git_project.url()))
+ .file("src/lib.rs", r#"
+ pub fn foo() -> u32 { 0 }
+ "#);
+ p.build();
+
+ assert_that(p.cargo("build"),
+ execs().with_status(0));
+}